package 基础练习;/**
 * @author： li
 * @date： 2022-01-08 14:32
 * @version 1.0
 */
/**
 问题描述
 　　给定n个十六进制正整数，输出它们对应的八进制数。
 输入格式
 　　输入的第一行为一个正整数n （1<=n<=10）。
 　　接下来n行，每行一个由0~9、大写字母A~F组成的字符串，表示要转换的十六进制正整数，每个十六进制数长度不超过100000。
 输出格式
 　　输出n行，每行为输入对应的八进制正整数。
 　　【注意】
 　　输入的十六进制数不会有前导0，比如012A。
 　　输出的八进制数也不能有前导0。
 样例输入
 　　2
 　　39
 　　123ABC
 样例输出
 　　71
 　　4435274
 　　【提示】
 　　先将十六进制数转换成某进制数，再由某进制数转换成八进制。
 */
import java.util.*;
public class 十六进制转八进制 {
    public void toE(int n){
        int x;int t=0;
        Stack<Integer> stack = new Stack<>();
        while(n>0){
            x=n%8;
            stack.push(x);
            t++;
            n/=8;
        }
        while(!stack.empty()){
            for(int i=0;i<t;i++){
            int num = stack.pop();
            System.out.format("%d",num);
            }
            System.out.println(" ");
        }
    }
    public void Hex2Oct(String n) {
        int hex2dex = 0;
        int reIndex = 0;
        /*十六进制转十进制*/
        for (int i = n.length()-1; i >= 0; i--) {
            if(Character.isDigit(n.charAt(i))&&
                    Integer.parseInt(String.valueOf(n.charAt(i))) >= 0 &&
                    Integer.parseInt(String.valueOf(n.charAt(i))) <= 9){
                hex2dex += Integer.parseInt(String.valueOf(n.charAt(i))) * Math.pow(16, reIndex);
            } else {
                switch (n.charAt(i)) {
                    case 'A':
                        hex2dex += 10 * Math.pow(16, reIndex);
                        break;
                    case 'B':
                        hex2dex += 11 * Math.pow(16, reIndex);
                        break;
                    case 'C':
                        hex2dex += 12 * Math.pow(16, reIndex);
                        break;
                    case 'D':
                        hex2dex += 13 * Math.pow(16, reIndex);
                        break;
                    case 'E':
                        hex2dex += 14 * Math.pow(16, reIndex);
                        break;
                    case 'F':
                        hex2dex += 15 * Math.pow(16, reIndex);
                        break;
                }
            }
            reIndex++;
        }
        //十进制转八进制
        toE(hex2dex);

    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String[] strings = new String[n];
        for(int i=0;i<n;i++){
            strings[i]=sc.next();
        }
//        for(int i=0;i<n;i++){
//            System.out.println(strings[i]);
//        }
        十六进制转八进制 aa = new 十六进制转八进制();
        for (int i=0;i<n;i++){
           aa.Hex2Oct(strings[i]);
        }
    }
}
